package 剑指offer;

public class p18删除链表的节点 {
    public ListNode deleteNode1(ListNode head, int val) {
        if (head.val==val) {
            return head.next;
        }
        ListNode cur=head;
        ListNode prev=head;

        while (prev.next!=null) {

            if (cur.val==val) {
                prev.next=cur.next;
            }else {
                prev=cur;
            }
            cur=cur.next;

        }
        return head;
    }

    public ListNode deleteNode2(ListNode head, int val) {
        if (head.val==val) return head.next;
        ListNode prev=head;
        ListNode cur=head.next;

        while (cur!=null && cur.val!=val) {
            prev=cur;
            cur=cur.next;
        }

        if (cur!=null) {
            prev.next=cur.next;
        }
        return head;

    }

    public ListNode deleteNode(ListNode head, int val) {
        if (head.val==val) {
            return head.next;
        }
        ListNode cur=head;
        ListNode prev=null;
        while (true) {
            if (cur.val==val) {
                break;
            }
            prev=cur;
            cur=cur.next;
        }
        prev.next=cur.next;
        return head;
    }

}
